package br.com.sistema.negocio.facade.permissao;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.criterion.Order;

import br.com.framework.client.negocio.ExcecaoDadosDuplicados;
import br.com.framework.client.permissao.entidade.Usuario;
import br.com.framework.client.permissao.negocio.FacadeGeneric;
import br.com.framework.client.persistencia.DAOFactory;
import br.com.sistema.persistencia.dao.permissao.PermissaoDAO;
import br.com.sistema.persistencia.dao.permissao.UsuarioDAO;

@Stateless
public class FacadeUsuario extends FacadeGeneric<Usuario, UsuarioDAO> implements IFacadeUsuario {

	@PersistenceContext
	private EntityManager em;

	@Override
	public EntityManager getEm() {
		return em;
	}

	@Override
	public Order getOrderBuscarTodos() {
		return Order.asc("nome");
	}
	
	public boolean possuiPermissao(Integer idGrupo, String pagina, String acao) {
		return new PermissaoDAO(em).possuiPermissao(idGrupo, pagina, acao);
	}

	public Integer getIdGrupo(String login, String senha) {
		return DAOFactory.getIntance().getDAO(em, UsuarioDAO.class).getIdGrupo(login, senha);
	}

	public void entidadeCadastrada(Usuario usuario) throws ExcecaoDadosDuplicados {
		Integer idBanco = DAOFactory.getIntance().getDAO(em, UsuarioDAO.class).getIdUsuarioCadastradoPorLogin(usuario.getLogin());
		if (idBanco != null && !idBanco.equals(usuario.getId())) {
			throw new ExcecaoDadosDuplicados("err.duplicidade.dados", usuario.getLogin());
		}
	}

}
